#ifndef __IMemoryStream_H__
#define __IMemoryStream_H__

#include "IWriter.h"
#include "IReader.h"
#include "IPacket.h"

namespace lampe{
namespace stream{

class IMemoryStream:public virtual IWriter,public virtual IReader,public virtual IPacket{
public:
	/***
	 * Возвращяет указатель на начало данных, которыми управляет данный экземпляр класса
	 *
	 * @return указатель на начало данных
	 * **/
	virtual void*data()=0;
	
	/***
	 * Устанавливает адрес, на память, которой должен управлять данный экземпляр класса
	 *
	 * @param begin адрес на начало данных
	 * @param size размер данных в абйтах
	 * @param free_on_destroy TRUE если занимаемые данные требуется отчистить
	 * **/
	virtual void data(void*begin,irr::u32 size,bool free_on_destroy=true)=0;
	
	/***
	 * Отчищяет занимаемою память
	 * **/
	virtual void clear()=0;
};
/***
 * Создаёт экземпляр класса IMemoryStream и возвращяет его
 *
 * @return созданный экземпляр класса IMemoryStream
 * **/
IMemoryStream*createMemoryStream();

}//namespace stream
}//namespace lampe
#endif
